package simple.string;

/**
 * @Desc <a href="https://leetcode.cn/problems/reverse-string-ii/">541. 反转字符串 II</a>
 * 给定一个字符串 s 和一个整数 k，从字符串开头算起，每计数至 2k 个字符，就反转这 2k 字符中的前 k 个字符。
 * 如果剩余字符少于 k 个，则将剩余字符全部反转。
 * 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
 * 示例 1：
 *   输入：s = "abcdefg", k = 2
 *   输出："bacdfeg"
 * 示例 2：
 *   输入：s = "abcd", k = 2
 *   输出："bacd"
 * @Date 2023/5/30 22:00
 * @Created by 刘学松
 */
public class 反转字符串II {
    public String reverseStr(String s, int k) {
        char[] chars = s.toCharArray();
        int i = 0;
        while (i <= chars.length) {
            reverse(chars, i, Math.min(i + k, chars.length) - 1);
            i += (k<<1);
        }
        return new String(chars);
    }

    public void reverse(char[] chars, int start, int end) {
        while (start < end) {
            char temp = chars[start];
            chars[start] = chars[end];
            chars[end] = temp;
            ++start;
            --end;
        }
    }
}
